home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / FREENET / BLOCH / SOCKE14S / c / socketeer < prev   
Text File  |  1998-12-09  |  19KB  |  604 lines

  1. //#define MemCheck_MEMCHECK 1
  2. //#include "MemCheck:MemCheck.h"
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. #include "toolbox.h"
  9. #include "event.h"
  10. #include "gadgets.h"
  11. #include "iconbar.h"
  12. #include "menu.h"
  13. #include "wimplib.h"
  14. #include "window.h"
  15. #include "quit.h"
  16. #include "proginfo.h"
  17.  
  18. #include "version.h"
  19. #include "misc.h"
  20. #include "connect.h"
  21. #include "serial.h"
  22. #include "setup.h"
  23. #include "foh.h"
  24. #include "launcher.h"
  25. #include "ping.h"
  26. #include "debug.h"
  27. #include "bconsts.h"
  28.  
  29. extern MessagesFD   msg_block={0,0,0,0};
  30.  
  31. static IdBlock        id_block;
  32.        ObjectId     AddWin, ConnMenu, ControlWin, DisconnWin, FingerWin, FriendsWin, IconBar, IconMenu, IdleWin, LauncherWin, MessageWin, PasswordWin, ProgInfo, RenameWin, SetupAccoun, SetupConnec, SetupEther, SetupFE, SetupFinger, SetupTCPIP, SetupLaunch, SetupMenu, SetupModem, SetupWin, StatsWin;
  33. static BBox         Q2_onscreen, Q2_offscreen;
  34. static int          task_handle = 0, current_wimp = 0, interested = 0;
  35.                     //init_setup = 0;
  36. static int          timer_start_time = 0;
  37. static int          first_time_init = 0;
  38. static int          dialogue_timeout = 0;
  39. static char         directory[32] = "<Socketeer$Dir>";
  40. static void        *sprite_area;
  41. //static void         *er;
  42.  
  43. extern int          quit = 0, foh_confirmed = 0, foh_conn_state = 0;
  44.  
  45. static char         /*prompt_var[32],*/ *password;
  46.  
  47. /*static char const serial_dir[]="SerialDev:modules";*/
  48.  
  49. extern void foh_get_password(char *pw)
  50. {
  51.   ER(writablefield_set_value(0, PasswordWin, 0, "\0"));
  52.   ER(toolbox_show_object(0, PasswordWin, 3, NULL, 0, 0));
  53.   password = pw;
  54. }
  55.  
  56. /*static void write_in_icon(char *text)
  57. {
  58.   WimpGetIconStateBlock  b;
  59.  
  60.   iconbar_get_icon_handle(0, IconBar, &b.icon_handle);
  61.   b.window_handle = -1;
  62.   wimp_get_icon_state(&b);
  63.   strcpy(b.icon.data.it.buffer, text);
  64. }*/
  65.  
  66. extern void foh_change_status(char *text, char *sprite, char *toggle, int setup_grey)
  67. {
  68.   /*char prefix[64]="Socketeer: ";*/
  69.  
  70.   /*strcat(prefix, text);*/
  71.   ER(iconbar_set_text(0, IconBar, text));
  72.   /*ER(window_set_title(0, LauncherWin, prefix));*/
  73.   /*ER(displayfield_set_value(0, ControlWin, 4, text));*/
  74.   /*write_in_icon(text);*/
  75.   ER(iconbar_set_sprite(0, IconBar, sprite));
  76.   ER(menu_set_entry_text(0, ConnMenu, 0, toggle));
  77.   ER(actionbutton_set_text(0, ControlWin, 2, toggle));
  78.   ER(menu_set_fade(0, IconMenu, 3, setup_grey));
  79.   ER(gadget_set_flags(0, ControlWin, 4, setup_grey<<31));
  80. }
  81.  
  82. static int foh_get_password_handler(void)
  83. {
  84.   writablefield_get_value(0, PasswordWin, 0, password, 64, NULL);
  85.   connect_sendpassword();
  86.   return(1);
  87. }
  88.  
  89. static void dialogue_poll(void)
  90. {
  91.   if (read_time() > dialogue_timeout && dialogue_timeout != 0)
  92.   {
  93.     toolbox_hide_object(0, MessageWin);
  94.     dialogue_timeout = 0;
  95.   }
  96. }
  97.  
  98. extern void foh_inform(char *text, int time)
  99. {
  100.   ER(button_set_value(0, MessageWin, 0, text));
  101.   ER(actionbutton_set_text(0, MessageWin, 1, msgs_lookup("Bokay")));
  102.   ER(gadget_move_gadget(0, MessageWin, 3, &Q2_offscreen));
  103.   ER(toolbox_show_object(0, MessageWin, 3, NULL, 0, 0));
  104.   ER(actionbutton_set_event(0, MessageWin, 1, 0));
  105.   if (time != 0)
  106.     dialogue_timeout = read_time() + time;
  107. }
  108.  
  109. extern void foh_question(char *text, char *c1, char *c2, int event1, int event2, int time)
  110. {
  111.   // N.B. text is sent as text, the rest are message tokens
  112.   ER(button_set_value(0, MessageWin, 0, text));
  113.   ER(actionbutton_set_text(0, MessageWin, 1, msgs_lookup(c1)));
  114.   ER(actionbutton_set_text(0, MessageWin, 3, msgs_lookup(c2)));
  115.   ER(gadget_move_gadget(0, MessageWin, 3, &Q2_onscreen));
  116.   ER(toolbox_show_object(0, MessageWin, 3, NULL, 0, 0));
  117.   ER(actionbutton_set_event(0, MessageWin, 1, event1));
  118.   ER(actionbutton_set_event(0, MessageWin, 3, event2));
  119.   if (time != 0)
  120.     dialogue_timeout = read_time() + time;
  121.   else
  122.     dialogue_timeout = 0;
  123. }
  124.  
  125. extern void foh_timer_control(enum timer_commands command)
  126. {
  127.   switch (command)
  128.   {
  129.     case start :
  130.       timer_start_time = read_time(); break;
  131.     case stop  :
  132.       timer_start_time = 0; break;
  133.   }
  134. }
  135.  
  136. extern void foh_stats(int traffic_max, int traffic_val, int tx, int rx, int ping_max, int ping_val, int connect_speed)
  137. {
  138.   int cmax, cval, x;
  139.   char txt[16];
  140.  
  141.   ER(slider_get_bounds(1, StatsWin, 1, &cmax, &x, &x));
  142.   ER(slider_get_value(0, StatsWin, 1, &cval));
  143.   if (cmax != traffic_max && traffic_max != -1)
  144.     ER(slider_set_bounds(1, StatsWin, 1, traffic_max, 0, 1));
  145.   if (cval != traffic_val && traffic_val != -1)
  146.   {
  147.     ER(slider_set_value(0, StatsWin, 1, traffic_val));
  148.     sprintf(txt, "%d", traffic_val);
  149.     ER(displayfield_set_value(0, StatsWin, 4, txt));
  150.   }
  151.  
  152.   ER(slider_get_bounds(1, StatsWin, 9, &cmax, &x, &x));
  153.   ER(slider_get_value(0, StatsWin, 9, &cval));
  154.   if (cmax != ping_max && ping_max != -1)
  155.     ER(slider_set_bounds(1, StatsWin, 9, ping_max, 0, 1));
  156.   if (cval != ping_val && ping_val != -1)
  157.   {
  158.     ER(slider_set_value(0, StatsWin, 9, ping_val));
  159.     sprintf(txt, "%d", ping_val);
  160.     ER(displayfield_set_value(0, StatsWin, 10, txt));
  161.   }
  162.  
  163.   ER(displayfield_get_value(0, StatsWin, 2, txt, 16, &x));
  164.   if (atoi(txt) != tx && tx != -1)
  165.   {
  166.     sprintf(txt, "%d", tx);
  167.     ER(displayfield_set_value(0, StatsWin, 2, txt));
  168.   }
  169.  
  170.   ER(displayfield_get_value(0, StatsWin, 6, txt, 16, &x));
  171.   if (atoi(txt) != rx && rx != -1)
  172.   {
  173.     sprintf(txt, "%d", rx);
  174.     ER(displayfield_set_value(0, StatsWin, 6, txt));
  175.   }
  176.  
  177.   ER(numberrange_get_value(0, StatsWin, 0xd, &cval));
  178.   if (cval != connect_speed)
  179.     ER(numberrange_set_value(0, StatsWin, 0xd, connect_speed));
  180. }
  181.  
  182. extern void foh_reflectcflags(int greyall, int sustain, int idle30)
  183. {
  184.   int cgreyall, csustain, cidle30;
  185.  
  186.   ER(menu_get_fade(0, ConnMenu, 1, &cgreyall))
  187.   if (greyall)
  188.   {
  189.     if (greyall != cgreyall)
  190.     {
  191.       ER(menu_set_fade(0, ConnMenu, 1, 1));
  192.       ER(menu_set_fade(0, ConnMenu, 2, 1));
  193.       ER(menu_set_fade(0, ConnMenu, 3, 1));
  194.       ER(menu_set_tick(0, ConnMenu, 2, 0));
  195.       ER(menu_set_tick(0, ConnMenu, 3, 0));
  196.     }
  197.     ER(toolbox_hide_object(0, StatsWin));
  198.     return;
  199.   }
  200.   else
  201.   {
  202.     if (greyall != cgreyall)
  203.     {
  204.       ER(menu_set_fade(0, ConnMenu, 1, 0));
  205.       ER(menu_set_fade(0, ConnMenu, 2, 0));
  206.       ER(menu_set_fade(0, ConnMenu, 3, 0));
  207.     }
  208.   }
  209.  
  210.   ER(menu_get_tick(0, ConnMenu, 2, &csustain));
  211.   ER(menu_get_tick(0, ConnMenu, 3, &cidle30));
  212.   if (csustain != sustain)
  213.     ER(menu_set_tick(0, ConnMenu, 2, sustain));
  214.   if (cidle30 != idle30)
  215.     ER(menu_set_tick(0, ConnMenu, 3, idle30));
  216. }
  217.  
  218. /*extern void foh_slider(int max, int val)
  219. {
  220. }*/
  221.  
  222. static void timer_update(void)
  223. {
  224.   char  time_text[12], time_text_cmp[12];
  225.   int   elapsed=0;
  226.  
  227.   if (CPC.assume_permanent)
  228.     return;
  229.  
  230.   if (timer_start_time != 0)
  231.     elapsed = (read_time() - timer_start_time) / 100;
  232.  
  233.   if (CPC.show_seconds)
  234.     sprintf(time_text, "%02d:%02d:%02d",
  235.        elapsed / 3600, (elapsed / 60) % 60, (elapsed % 60) );
  236.   else
  237.     sprintf(time_text, "%02d:%02d",
  238.        elapsed / 3600, (elapsed / 60) % 60);
  239.   /*ER(displayfield_get_value(0, ControlWin, 3, time_text_cmp, 12, NULL));
  240.   if (strcmp(time_text, time_text_cmp) != 0)
  241.     ER(displayfield_set_value(0, ControlWin, 3, time_text));*/
  242.   ER(iconbar_get_text(0, IconBar, time_text_cmp, 12, NULL));
  243.   if (strcmp(time_text, time_text_cmp) != 0 && timer_start_time != 0)
  244.     ER(iconbar_set_text(0, IconBar, time_text));
  245.     /*write_in_icon(time_text);*/
  246. }
  247.  
  248. static char ic[3][12]={"online\0", "online_i\0", "online_p"};
  249.  
  250. static void icon_update(void)
  251. {
  252.   char icon[12];
  253.  
  254.   ER(iconbar_get_sprite(0, IconBar, icon, 12, NULL));
  255.   if (strcmp(icon, ic[foh_conn_state]) == NULL)
  256.     return;
  257.   ER(iconbar_set_sprite(0, IconBar, ic[foh_conn_state]));
  258. }
  259.  
  260. void foh_complain(char *message)
  261. {
  262.   _kernel_oserror  error;
  263.   error.errnum = 0;
  264.   strcpy(error.errmess, message);
  265.   wimp_report_error(&error, 0, "Socketeer");
  266. }
  267.  
  268. void foh_open_confirm(void)
  269. {
  270.   ER(toolbox_show_object(0, DisconnWin, Toolbox_ShowObject_AtPointer, NULL, 0, 0));
  271. }
  272.  
  273. static int foh_confirm_handler(void)
  274. {
  275.   foh_confirmed = 1;
  276.   connect_toggle();
  277.   return(1);
  278. }
  279.  
  280. void foh_idle_warn(int secs)
  281. {
  282.   char str[8];
  283.   if (secs == -1)
  284.   {
  285.     toolbox_hide_object(0, IdleWin);
  286.     return;
  287.   }
  288.   sprintf(str, "%d", secs);
  289.   ER(displayfield_set_value(0, IdleWin, 1, str));
  290.   ER(toolbox_show_object(0, IdleWin, 3, NULL, 0, 0));
  291. }
  292.  
  293. static int quit_handler(void)
  294. {
  295.   quit = 1;
  296.   return(1);
  297. }
  298.  
  299. static int data_load_handler(WimpMessage *message, void *h)
  300. {
  301.   int w;
  302.  
  303.   h=h;
  304.  
  305.   ER(window_get_wimp_handle(0, SetupConnec, &w));
  306.   if (message->data.data_load.destination_window == w)
  307.   {
  308.     int i_on[2], i_off[2];
  309.     ER(gadget_get_icon_list(0, SetupConnec, 0x124, i_on, 8, NULL));
  310.     ER(gadget_get_icon_list(0, SetupConnec, 0x127, i_off, 8, NULL));
  311.     if (message->data.data_load.destination_icon == i_on[0])
  312.       setup_drag_to(ICON_ONLINE, message->data.data_load.leaf_name);
  313.     if (message->data.data_load.destination_icon == i_off[0])
  314.       setup_drag_to(ICON_OFFLINE, message->data.data_load.leaf_name);
  315.   }
  316.   return(1);
  317. }
  318.  
  319. static int quick_connect_handler(void)
  320. {
  321.   connect_toggle();
  322.   return(1);
  323. }
  324.  
  325. static int iconbar_adjust_handler(void)
  326. {
  327.   if (connect_state == offline)
  328.   {
  329.     connect_toggle();
  330.     return(1);
  331.   }
  332.   if (!CPC.adjust_stats)
  333.     connect_toggle();
  334.   else
  335.     ER(toolbox_show_object(0, StatsWin, Toolbox_ShowObject_AtPointer, NULL, 0, 0));
  336.   return(1);
  337. }
  338.  
  339. static int show_log(void)
  340. {
  341.   system("Filer_Run <Choices$Dir>.Socketeer.Log");
  342.   return(1);
  343. }
  344.  
  345. static int autocreate_handler(int event_code, ToolboxEvent *event, IdBlock *id_block, void *h)
  346. {
  347.   ToolboxObjectAutoCreatedEvent    *event_a;
  348.   char serial_drivers[1024];
  349.   int  x=0, drivers, num=0;
  350.  
  351.   h=h; event_code=event_code;
  352.  
  353.   event_a = (ToolboxObjectAutoCreatedEvent*) event;
  354.  
  355.   if (strcmp(event_a->template_name, "AddWin") == 0)
  356.     AddWin = id_block->self_id;
  357.   if (strcmp(event_a->template_name, "ConnMenu") == 0)
  358.   {
  359.     ConnMenu = id_block->self_id;
  360.     ER(event_register_toolbox_handler(-1, 0x500, (ToolboxEventHandler*) connect_toggle_cflags_handler, NULL));
  361.     ER(event_register_toolbox_handler(-1, 0x501, (ToolboxEventHandler*) connect_toggle_cflags_handler, NULL));
  362.     foh_reflectcflags(1, 0, 0);
  363.   }
  364.   if (strcmp(event_a->template_name, "FriendsWin") == 0)
  365.     FriendsWin = id_block->self_id;
  366.   if (strcmp(event_a->template_name, "DisconnWin") == 0)
  367.     DisconnWin = id_block->self_id;
  368.   if (strcmp(event_a->template_name, "ControlWin") == 0)
  369.   {
  370.     ControlWin = id_block->self_id;
  371.     ER(stringset_set_available(0, ControlWin, 4, setup_stringset));
  372.     ER(stringset_set_selected(0, ControlWin, 4, connect_profile_current_name));
  373.     foh_stats(CPC.serial_speed >> 3, 0, 0, 0, CPC.pings_disconnect, 0, 0);
  374.   }
  375.   if (strcmp(event_a->template_name, "IconBar") == 0)
  376.     IconBar = id_block->self_id;
  377.   if (strcmp(event_a->template_name, "IconMenu") == 0)
  378.     IconMenu = id_block->self_id;
  379.   if (strcmp(event_a->template_name, "IdleWin") == 0)
  380.     IdleWin = id_block->self_id;
  381.   if (strcmp(event_a->template_name, "LauncherWin") == 0)
  382.   {
  383.     LauncherWin = id_block->self_id;
  384.     launcher_init();
  385.     ER(event_register_wimp_handler(LauncherWin, -1, launcher_event_handler, NULL));
  386.   }
  387.   if (strcmp(event_a->template_name, "MessageWin") == 0)
  388.   {
  389.     MessageWin = id_block->self_id;
  390.     ER(gadget_get_bbox(0, MessageWin, 3, &Q2_onscreen));
  391.     Q2_offscreen.xmin = Q2_offscreen.ymin =
  392.     Q2_offscreen.xmax = Q2_offscreen.ymax = -1000;
  393.   }
  394.   if (strcmp(event_a->template_name, "PasswordWin") == 0)
  395.     PasswordWin = id_block->self_id;
  396.   if (strcmp(event_a->template_name, "ProgInfo") == 0)
  397.   {
  398.     ProgInfo = id_block->self_id;
  399.     proginfo_set_version(0, ProgInfo, VERSION);
  400.   }
  401.   if (strcmp(event_a->template_name, "RenameWin") == 0)
  402.     RenameWin = id_block->self_id;
  403.   if (strcmp(event_a->template_name, "SetupAccoun") == 0)
  404.   {
  405.     SetupAccoun = id_block->self_id;
  406.     ER(event_register_toolbox_handler(SetupAccoun, RadioButton_StateChanged, setup_pwradio_handler, NULL));
  407.   }
  408.   if (strcmp(event_a->template_name, "SetupConnec") == 0)
  409.     SetupConnec = id_block->self_id;
  410.   if (strcmp(event_a->template_name, "SetupEther") == 0)
  411.   {
  412.     char v[256], *b;
  413.  
  414.     SetupEther = id_block->self_id;
  415.     ER(event_register_toolbox_handler(SetupEther, OptionButton_StateChanged, (ToolboxEventHandler*) setup_perm_toggle, NULL));
  416.  
  417.     if (getenv("Socketeer$DCI4Drivers") != NULL) {
  418.       strcpy(v, getenv("Socketeer$DCI4Drivers"));
  419.       for (b=v; *b!=0; b++)
  420.         if (*b == ' ') *b=',';
  421.       ER(stringset_set_available(0, SetupEther, SETUPETHER_DRIVER, v+1));
  422.     }
  423.  
  424.     //strcpy(v, getenv("Socketeer$DCI4
  425.   }
  426.   if (strcmp(event_a->template_name, "SetupFE") == 0)
  427.     SetupFE = id_block->self_id;
  428.   if (strcmp(event_a->template_name, "SetupFinger") == 0)
  429.     SetupFinger = id_block->self_id;
  430.   if (strcmp(event_a->template_name, "SetupTCPIP") == 0)
  431.     SetupTCPIP = id_block->self_id;
  432.   if (strcmp(event_a->template_name, "SetupLaunch") == 0)
  433.     SetupLaunch = id_block->self_id;
  434.   if (strcmp(event_a->template_name, "SetupModem") == 0)
  435.   {
  436.     SetupModem = id_block->self_id;
  437.     drivers = read_entries("SerialDev:Modules", serial_drivers, 1024);
  438.     for (; num != drivers; x++)
  439.       if (serial_drivers[x] < 32)
  440.         { serial_drivers[x] = ','; num++; }
  441.     serial_drivers[x-1] = 0;
  442.     stringset_set_available(0, SetupModem, 0x100, serial_drivers);
  443.   }
  444.   if (strcmp(event_a->template_name, "SetupWin") == 0)
  445.   {
  446.     SetupWin = id_block->self_id;
  447.     ER(event_register_toolbox_handler(-1, StringSet_ValueChanged, setup_load_new_profile, NULL));
  448.     if (getenv("Socketeer$DCI4Drivers") == NULL) {
  449.       ER(gadget_set_flags(1<<31, SetupWin, SETUP_SETHER, 1<<31))
  450.     }
  451.   }
  452.   if (strcmp(event_a->template_name, "StatsWin") == 0)
  453.   {
  454.     StatsWin = id_block->self_id;
  455.   }
  456.  
  457.   if (StatsWin && IconBar && ControlWin && !first_time_init)
  458.   {
  459.     first_time_init = 1;
  460.     connect_init_new_profile();
  461.   }
  462.  
  463.   return(1);
  464. }
  465.  
  466. /*static int create_objects(void)
  467. {
  468.   _kernel_oserror *e;
  469.  
  470.   if (
  471.     (e=toolbox_create_object(0, "AddWin", &AddWin))           != NULL ||
  472.     (e=toolbox_create_object(0, "FriendsWin", &FriendsWin))   != NULL ||
  473.     (e=toolbox_create_object(0, "IconBar", &IconBar))         != NULL ||
  474.     (e=toolbox_create_object(0, "IdleWin", &IdleWin))         != NULL ||
  475.     (e=toolbox_create_object(0, "LauncherWin", &LauncherWin)) != NULL ||
  476.     (e=toolbox_create_object(0, "ControlWin", &ControlWin))   != NULL ||
  477.     (e=toolbox_create_object(0, "MessageWin", &MessageWin))   != NULL ||
  478.     (e=toolbox_create_object(0, "PasswordWin", &PasswordWin)) != NULL ||
  479.     (e=toolbox_create_object(0, "ProgInfo", &ProgInfo))       != NULL ||
  480.     (e=toolbox_create_object(0, "RenameWin", &RenameWin))     != NULL ||
  481.     (e=toolbox_create_object(0, "SetupAccoun", &SetupAccoun)) != NULL ||
  482.     (e=toolbox_create_object(0, "SetupConnec", &SetupConnec)) != NULL ||
  483.     (e=toolbox_create_object(0, "SetupTCPIP", &SetupTCPIP))       != NULL ||
  484.     (e=toolbox_create_object(0, "SetupLaunch", &SetupLaunch)) != NULL ||
  485.     (e=toolbox_create_object(0, "SetupModem", &SetupModem))   != NULL ||
  486.     (e=toolbox_create_object(0, "SetupWin", &SetupWin))       != NULL ||
  487.     (e=toolbox_create_object(0, "StatsWin", &StatsWin))       != NULL
  488.     )
  489.     {
  490.       wimp_report_error(e, 0, "Socketeer");
  491.       return(0);
  492.     }
  493.   return(1);
  494. }*/
  495.  
  496. static int null_event(void)
  497. {
  498.   dialogue_poll();
  499.   connect_poll();
  500.   timer_update();
  501.   if (connect_state == online)
  502.     icon_update();
  503.   return(1);
  504. }
  505.  
  506. int main(void)
  507. {
  508.   FILE             *fh;
  509.   int              event_code;
  510.   WimpPollBlock    poll_block;
  511.   char             /*last_profile[256], */var[256], last_valid[12], *opts;
  512.  
  513.   opts = get_command_line();
  514.   debug_flags.notimeouts = (strstr(opts, "-notimeouts") != NULL);
  515.   debug_flags.debuglog   = (strstr(opts, "-debuglog") != NULL);
  516.   debug_flags.noresconf  = (strstr(opts, "-noresconf") != NULL);
  517.  
  518.   if (debug_flags.debuglog) debug_init();
  519.   debug_log("Socketeer v%s started", VERSION);
  520.  
  521.   /*MemCheck_Init();
  522.   MemCheck_InterceptSCLStringFunctions();*/
  523.   /*HierProf_ProfileAllFunctions();*/
  524.  
  525.   debug_log("Registering event / message handlers");
  526.   ER(event_register_message_handler(0, (WimpMessageHandler*) quit_handler, NULL));
  527.   ER(event_register_message_handler(Wimp_MDataLoad, data_load_handler, 0));
  528.   ER(event_register_toolbox_handler(-1, 0x100, (ToolboxEventHandler*) quit_handler, NULL));
  529.   ER(event_register_toolbox_handler(-1, 0x110, (ToolboxEventHandler*) quick_connect_handler, NULL));
  530.   ER(event_register_toolbox_handler(-1, 0x113, (ToolboxEventHandler*) iconbar_adjust_handler, NULL));
  531.   ER(event_register_toolbox_handler(-1, 0x111, (ToolboxEventHandler*) foh_get_password_handler, NULL));
  532.   ER(event_register_toolbox_handler(-1, 0x112, (ToolboxEventHandler*) show_log, NULL));
  533.   ER(event_register_toolbox_handler(-1, 0x200, setup_open_handler, NULL));
  534.   ER(event_register_toolbox_handler(-1, 0x201, setup_open_handler, NULL));
  535.   ER(event_register_toolbox_handler(-1, 0x210, (ToolboxEventHandler*) setup_add_handler, NULL));
  536.   ER(event_register_toolbox_handler(-1, 0x211, (ToolboxEventHandler*) setup_rename_handler, NULL));
  537.   ER(event_register_toolbox_handler(-1, 0x212, (ToolboxEventHandler*) setup_delete_handler, NULL));
  538.   ER(event_register_toolbox_handler(-1, 0x213, (ToolboxEventHandler*) setup_save_handler, NULL));
  539.   ER(event_register_toolbox_handler(-1, 0x214, (ToolboxEventHandler*) setup_open_launcher, NULL));
  540.   ER(event_register_toolbox_handler(-1, 0x215, setup_edit_file, NULL));
  541.   ER(event_register_toolbox_handler(-1, 0x300, add_rename_confirm_handler, NULL));
  542.   ER(event_register_toolbox_handler(-1, 0x301, add_rename_confirm_handler, NULL));
  543.   ER(event_register_toolbox_handler(-1, 0x400, (ToolboxEventHandler*) foh_confirm_handler, NULL));
  544.   ER(event_register_toolbox_handler(-1, 0x401, (ToolboxEventHandler*) connect_extend_idle, NULL));
  545.   ER(event_register_toolbox_handler(-1, Toolbox_ObjectAutoCreated, autocreate_handler, NULL));
  546.   ER(event_register_wimp_handler(-1, Wimp_ENull, (WimpEventHandler*) null_event, NULL));
  547.   ER(event_set_mask(!Wimp_Poll_NullMask | Wimp_Poll_KeyPressedMask));
  548.  
  549.   debug_log("Registering with toolbox");
  550.   ER(toolbox_initialise(0, 310, &interested, &interested, directory, &msg_block,
  551.                      &id_block, ¤t_wimp, &task_handle, &sprite_area));
  552.   debug_log("Registering with event lib");
  553.   ER(event_initialise(&id_block));
  554.   /*if (!create_objects())
  555.   {
  556.     foh_complain("Couldn't create Toolbox objects");
  557.     exit(1);
  558.   } */
  559.  
  560.   debug_log("Starting ping library");
  561.   if (ping_init() != 0)
  562.   {
  563.     foh_complain(msgs_lookup("Epingprob"));
  564.     exit(1);
  565.   }
  566.  
  567.   debug_log("Loading last configuration");
  568.   fh = fopen("<Choices$Dir>.Socketeer.Last", "rb");
  569.   if (fh == NULL)
  570.     setup_read_profiles(1);
  571.   else
  572.   {
  573.     fgets(last_valid, 12, fh);
  574.     sprintf(var, "<Choices$Dir>.Socketeer.Profiles.%s", last_valid);
  575.     setup_read_profiles(!file_exists(var));
  576.     if (file_exists(var))
  577.       strcpy(connect_profile_current_name, last_valid);
  578.     fclose(fh);
  579.   }
  580.  
  581.   var_read("PPP$Choose", var);
  582.   if (strcmp(var, "Sergio") == 0)
  583.     ppp_module = sergio;
  584.   else
  585.     ppp_module = acorn;
  586.  
  587.   foh_timer_control(stop);
  588.   setup_load(connect_profile_current_name);
  589.   connect_read_responses();
  590.  
  591.   debug_log("Starting main loop");
  592.   while (!quit)
  593.     event_poll_idle(&event_code, &poll_block, read_time()+50, NULL);
  594.  
  595.   debug_log("Saving last configuration");
  596.   fh = fopen("<Choices$Dir>.Socketeer.Last", "w");
  597.   if (fh != NULL)
  598.   {
  599.     fputs(connect_profile_current_name, fh);
  600.     fclose(fh);
  601.   }
  602.   debug_log("The End");
  603. }
  604.